package a04_Abstract.Person;

/**
 * @Author quan
 * @Description 测试类
 * @Date 2023/2/28 17:29
 */
public class TestDemo {
    public static void main(String[] args) {
        //正常的写法：每个类创建一个对象
        /*
        Student s = new Student("张三");
        s.getInfo();
        s.study();

        Teacher t = new Teacher("王五");
        t.getInfo();
        t.teach();*/

        //多态的写法
       /* Student stu = new Student("张三");
        Teacher tea = new Teacher("王五");
        Fun(stu);//根据传入的对象表现出不同的行为(都是子类中重写过的方法)
        Fun(tea);
        stu.study();
        tea.teach();*/

        //向上转型的用法:抽象类不能直接new对象，可以通过向上转型，产生具体子类为父类实例化
        Person person1 = new Student("张三");
        person1.getInfo();
        Student s = (Student) person1;//调用子类中的特有方法：向上转型
        s.study();

        Person person2 = new Teacher("王五");
        person2.getInfo();
        Teacher t = (Teacher) person2;//调用子类中的特有方法：向上转型
        t.teach();
    }
    public static void Fun(Person person){
        person.getInfo();
    }
}
